package com.fanrenqiji.modules.sys.utils;

import com.fanrenqiji.common.utils.SpringContextHolder;
import com.fanrenqiji.modules.sys.entity.Dict;
import com.fanrenqiji.modules.sys.service.DictService;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.Map;

/**
 * @author lijian E-mail:ljz0721cx@163.com
 * @version 创建时间：2015年2月2日 下午5:32:18
 * @description 获取字典标签工具类
 */
public class DictUtils {

	private static DictService dictService = SpringContextHolder.getBean(DictService.class);

	public static final String CACHE_DICT_MAP = "dictMap";

	/**
	 * 获得字典便签
	 * 
	 * @param label
	 *            标签名
	 * @param type
	 *            词典的类型
	 * @param defaultValue
	 *            默认标签值
	 * @return
	 */
	public static String getDictLabel(String value, String type,
			String defaultValue) {
		if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(value)) {
			for (Dict dict : getDictList(type)) {
				if (type.equals(dict.getType())
						&& value.equals(dict.getValue())) {
					return dict.getLabel();
				}
			}
		}
		return defaultValue;
	}

	/**
	 * 获取字典值
	 * 
	 * @param label
	 *            标签名
	 * @param type
	 *            词典的类型
	 * @param defaultLabel
	 *            默认标签名
	 * @return
	 */
	public static String getDictValue(String label, String type,
			String defaultLabel) {
		if (StringUtils.isNotBlank(type) && StringUtils.isNotBlank(label)) {
			for (Dict dict : getDictList(type)) {
				if (type.equals(dict.getType())
						&& label.equals(dict.getLabel())) {
					return dict.getValue();
				}
			}
		}
		return defaultLabel;
	}

	/**
	 * 获取字典对象列表
	 * 
	 * @param type
	 *            词典的类型
	 * @return
	 */
	public static List<Dict> getDictList(String type) {
		@SuppressWarnings("unchecked")
		Map<String, List<Dict>> dictMap = Maps.newHashMap();
		for (Dict dict : dictService.findAllList()) {
			List<Dict> dictList = dictMap.get(dict.getType());
			if (dictList != null) {
				dictList.add(dict);
			} else {
				dictMap.put(dict.getType(), Lists.newArrayList(dict));
			}
		}
		List<Dict> dictList = dictMap.get(type);
		if (dictList == null) {
			dictList = Lists.newArrayList();
		}
		return dictList;
	}

}
